﻿#ifndef PYTHONMODULE_SCRIPTTHREAD_H
#define PYTHONMODULE_SCRIPTTHREAD_H

#include <QThread>

namespace ScriptManager
{
    class PythonAgent;

    class ScriptThread : public QThread
    {
        Q_OBJECT
    public: 
        ScriptThread(PythonAgent* agent, QStringList listPYCode, bool isGui);
        ScriptThread(PythonAgent* agent, QString filePath, bool isGui);
        ~ScriptThread();

        //设置python配置代码集合
        void setPara(QStringList listPara);
        //记录锁
        void recordLock();    
        //释放锁
        void releaseLock();    
        //停止执行
        void stop();
        //获取是否在运行的状态
        bool getIsRun();

        /// @brief 添加需要执行的命令
        /// @param command 命令
        /// @param filePath 文件路径
        /// @return 是否添加成功
        bool appendCommand(QString filePath,QStringList command);

        /// @brief 设置是导入案例
        void setIsImportExample();

    private:
        void run() override;
        //判断是否是python对象
        bool isPythonObj(QString code);

    private:
        QString m_filePath{};           //python代码文件路径
        PythonAgent* m_agent{};
        QStringList m_listPYCode;       //需要执行的python代码集合
        QStringList m_listPara;         //需要执行的python配置代码
        bool m_isPYCode{ true };        //是否是执行的python代码集合
        bool m_isStop{ false };         //是否停止
        bool m_isGui{ true };          //是否是界面模式
        int m_lockCount{ 0 };
        int m_commandIndex{ 0 };
        bool m_isImportExample{ false };
        /// @brief 当前线程执行脚本文件集合,防止递归调用脚本
        QStringList m_filePathList;
    };
}

#endif // PYTHONMODULE_SCRIPTTHREAD_H
